/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.dp1.pucp.Seguridad.Controlador;

import CharliesCookies.MainController;
import com.dp1.pucp.Modelo.Clases.Empleado;
import com.dp1.pucp.Modelo.Clases.Perfil;
import com.dp1.pucp.Seguridad.DAO.*;
import com.dp1.pucp.Seguridad.Vista.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import com.dp1.pucp.Modelo.Clases.Usuario;
import com.dp1.pucp.Util.Validaciones;
//import com.sun.xml.internal.ws.wsdl.writer.UsingAddressing;
import java.util.ArrayList;

public class UsuarioControlador {

    private UsuarioDAO m;
    private UsuarioGUI UsuarioView;
    private Usuario user;
    private ArrayList<String> lstEstado;
    private UsuarioControlador UserControlador;
    private final static int ESTADO_ACTIVO = 1;
    private final static String DEFECTO = "123456";

    public UsuarioControlador(UsuarioDAO dao, UsuarioGUI view, UsuarioControlador buc, Usuario u) {
        m = dao;
        UsuarioView = view;
        UsuarioView.user = u;
        UserControlador = buc;
        user = u;


        UsuarioView.addCancelarListener(new cancelarListener());
        UsuarioView.addLimpiarListener(new limpiarListener());
        UsuarioView.addGuardarListener(new guardarEmpleadoListener());
        UsuarioView.buscarEmpleadoListener(new buscarEmpleadoListener(UserControlador));
        UsuarioView.buscarPerfilListener(new buscarPerfilListener(UserControlador));

        this.llenarEstadoCombo();
        UsuarioView.setFormUsuario(user);
    }

    private void llenarEstadoCombo() {
        lstEstado = m.listarEstado();
        UsuarioView.borrarEstados();
        UsuarioView.llenaComboEstado(lstEstado);
    }

    class guardarEmpleadoListener implements ActionListener {

        @Override
        public void actionPerformed(ActionEvent e) {


            if (UsuarioView.getUsuario().equalsIgnoreCase("")) {
                Validaciones.mostrarMensajeErrorVal("Ingresar Usuario");
            } else {


                if (UsuarioView.getTxtEmpleado().equalsIgnoreCase("")) {
                    Validaciones.mostrarMensajeErrorVal("Seleccione un Empleado");
                } else {
                    if (UsuarioView.getTxtPerfil().equalsIgnoreCase("")) {
                        Validaciones.mostrarMensajeErrorVal("Seleccione un Perfil");
                    } else {
                        Validaciones.solicitarConfirmacionVal("¿Está seguro de Guardar el Usuario?");
                        Usuario u = new Usuario();
                        if (user != null) {
                            u = user;
                        } else {
                            u.setContrasena(UsuarioDAO.getStringMessageDigest(DEFECTO));
                        }

                        Empleado empleado = UsuarioView.getEmpleado();
                                              
                        //VALIDAD QUE EL EMPLEADO NO TENGA UN PERFIL
                        ArrayList<Usuario> usuarios = m.listarUsuario();
                        for (int i=0; i<usuarios.size(); i++){
                            Usuario usuario = usuarios.get(i);
                            if (usuario.getEmpleado().getIdempleado()==empleado.getIdempleado())
                            {
                                Validaciones.mostrarMensajeErrorVal("Este empleado ya tiene un perfil asociado"); return;
                            }
                        }
                        
                        
                        
                        u.setUsuario(UsuarioView.getUsuario());
                        u.setEstado(UsuarioView.getEstado());
                        u.setPerfil(UsuarioView.getPerfil());
                        u.setEmpleado(UsuarioView.getEmpleado());

                        LoginDAO loginDAO = new LoginDAO();
                        Usuario user = loginDAO.validarUsuario(u.getUsuario());
                        if (user.getIdusuario() != 0) {
                            Validaciones.mostrarMensajeErrorVal("Este Usuario ya se encuentra Registrado en el Sistema\nCambiar el nombre de Usuario");
                            return;
                        } else {
                            m.guardarUsuario(u);
                            Validaciones.mostrarMensajeAvisoVal("El usuario se guardó exitosamente!");


                            if (user != null) {
                                LogDAO.insertarLog(MainController.usuario, "Insertar Usuario");
                            } else {
                                LogDAO.insertarLog(MainController.usuario, "Modificar Usuario");
                            }
                            UsuarioView.dispose();
                        }
                    }
                }
            }
        }
    }

    class cancelarListener implements ActionListener {

        @Override
        public void actionPerformed(ActionEvent e) {
            UsuarioView.dispose();
        }
    }

    class limpiarListener implements ActionListener {

        @Override
        public void actionPerformed(ActionEvent e) {
            UsuarioView.LimpiarDatos();
        }
    }

    class buscarEmpleadoListener implements ActionListener {

        private UsuarioControlador buc;

        public buscarEmpleadoListener(UsuarioControlador buscarusr) {
            buc = buscarusr;
        }

        @Override
        public void actionPerformed(ActionEvent e) {
            BuscarEmpleadoGUI p = new BuscarEmpleadoGUI(UsuarioView.getPadre(), true);
            BuscarEmpleadoControlador d = new BuscarEmpleadoControlador(m, p, UsuarioView);
            p.setVisible(true);
        }
    }

    class buscarPerfilListener implements ActionListener {

        private UsuarioControlador buc;

        public buscarPerfilListener(UsuarioControlador buscarusr) {
            buc = buscarusr;
        }

        @Override
        public void actionPerformed(ActionEvent e) {
            BuscarPerfilGUI p = new BuscarPerfilGUI(UsuarioView.getPadre(), true);
            BuscarPerfilControlador d = new BuscarPerfilControlador(m, p, UsuarioView);
            p.setVisible(true);
        }
    }
}
